package cn.hicard.auth.service;

import java.util.List;

import cn.hicard.auth.entity.MgUserRole;
import cn.hicard.auth.entity.MgUserinfo;
import cn.hicard.auth.vo.LoginResult;
import cn.hicard.core.Page;
import cn.hicard.core.PageResult;
import cn.hicard.core.Where;

/**
 * 用户信息管理业务接口
 * @author zhangy
 *
 */
public interface UserinfoService {
	 
	/**
	 * 保存用户信息
	 * @param userinfo
	 * @throws Exception
	 */
	void save(MgUserinfo userinfo)throws Exception;
	
	/**
	 * 修改用户信息
	 * @param userinfo
	 * @throws Exception
	 */
	void update(MgUserinfo userinfo)throws Exception;
	
	/**
	 * 删除用户信息
	 * @param pkUserinfo
	 * @throws Exception
	 */
	void delete(int pkUserinfo)throws Exception;
	
	/**
	 * 查询用户信息
	 * @param pkUserinfo
	 * @return
	 * @throws Exception
	 */
	MgUserinfo getByPk(int pkUserinfo)throws Exception;
	
	/**
	 * 取得所有用户信
	 * @return
	 * @throws Exception
	 */
	List<MgUserinfo> getAll()throws Exception;
	
	/**
	 * 分页搜索用户信息
	 * @param userinfo
	 * @param page
	 * @return
	 * @throws Exception
	 */
	PageResult<MgUserinfo> search(Where where, Page page) throws Exception;

	/**
	 * 跟据登录名查询用户信息
	 * @param loginid
	 * @return
	 * @throws Exception
	 */
	MgUserinfo getByLoginid(String loginid) throws Exception;
	
	/**
	 * 判断登录名是否存在
	 * @param loginid
	 * @return
	 * @throws Exception
	 */
	boolean existLoginid(String loginid) throws Exception;

	/**
	 * 用户登录操作
	 * @param loginid
	 * @param password
	 * @param usertype
	 * @return 返回登录的结果
	 * @throws Exception
	 */
	LoginResult login(String loginid, String password, String usertype) throws Exception;

	/**
	 * 保存用户与角色关联数据<BR/>
	 * 先删除旧有已分配的pkUserinfo与关联的，再保存新的urlist
	 * @param pkUserinfo
	 * @param urlist
	 */
	void saveUserRole(int pkUserinfo, List<MgUserRole> urlist) throws Exception;

	/**
	 * 查询用户拥有的资源角色主键集合，排除“菜单角色”
	 * @param pkUserinfo
	 * @return
	 */
	List<Integer> findOwnRolePks(int pkUserinfo) throws Exception;
	
}
